package com.ruoyi.user.domain.bo;

import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.enums.UserBusinessSubType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.compress.utils.Lists;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;

/**
 * 人员信息业务对象 user_info
 *
 * @author strongme
 * @date 2023-04-24
 */

@Data
@EqualsAndHashCode(callSuper = true)
public class UserInfoBo extends BaseEntity {

    private UserBusinessSubType subType;

    private List<UserBusinessSubType> subTypeList = Lists.newArrayList();

    /**
     * 主键
     */
    @NotNull(message = "主键不能为空", groups = {EditGroup.class})
    private Long id;

    /**
     * 头像
     */
    private String avatar;

    /**
     * 人员类型
     */
    private String type;

    /**
     * 所属地区
     */
    private String area;

    /**
     * 姓名
     */
    private String name;

    /**
     * 性别
     */
    private String gender;

    /**
     * 民族
     */
    private String mz;

    /**
     * 政治面貌
     */
    private String zzmm;

    /**
     * 身高
     */
    private Long height;

    /**
     * 身份证号码
     */
    private String idno;

    /**
     * 出生日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

    /**
     * 文化程度
     */
    private String whcd;

    /**
     * 决定机关
     */
    private String jdjg;

    /**
     * 决定时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date jdsj;

    /**
     * 负责人id
     */
    private Long fzr;

    /**
     * 户籍地派出所
     */
    private String hjdpcs;

    /**
     * 户籍地
     */
    private String hjd;

    /**
     * 户籍地详址
     */
    private String hjdxz;

    /**
     * 居住地派出所
     */
    private String jzdpcs;

    /**
     * 居住地
     */
    private String jzd;

    /**
     * 居住地详址
     */
    private String jzdxz;

    /**
     * 就业情况
     */
    private String jyqk;

    /**
     * 固定电话
     */
    private String gddh;

    /**
     * 手机号码
     */
    private String mobile;

    /**
     * 婚姻状况
     */
    private String hyzk;

    /**
     * 目前状态
     */
    private String mqzt;

    /**
     * 是否与父母居住
     */
    private String sfyfmzj;

    /**
     * 法律文书编号
     */
    private String flwsbh;

    /**
     * 原始档案编号
     */
    private String ysdabh;

    /**
     * 所属警务区
     */
    private String ssjwq;

    /**
     * 滥用毒品类型
     */
    private String lydplx;

    public void setLydplxList(List<String> lists) {
        this.lydplx = StrUtil.join(",", lists);
    }

    /**
     * 技能特长
     */
    private String jntc;

    public void setJntcList(List<String> lists) {
        this.jntc = StrUtil.join(",", lists);
    }

    /**
     * 决定书
     */
    private String jds;

    /**
     * 风险等级
     */
    private String fxdj;

    public void setFxdjList(List<String> lists) {
        this.fxdj = StrUtil.join(",", lists);
    }

    /**
     * 入所日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date rsrq;

    /**
     * 出所日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date csrq;

    /**
     * 康复救助中心
     */
    private Long kfjzzx;

    /**
     * 送至人员
     */
    private String szry;

    /**
     * 送至单位
     */
    private String szdw;

    /**
     * 戒毒期限起日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date jdqxqrq;

    /**
     * 报到日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date bdrq;

    /**
     * 其他犯罪记录
     */
    private String qtfzjl;

    /**
     * 指纹编号
     */
    private String zwbh;

    /**
     * dna编号
     */
    private String dnabh;

    /**
     * 备注
     */
    private String remark;

    /**
     * 帮扶计划
     */
    private String helpPlan;

    /**
     * 人员期数类型
     */
    private String termType;

    /**
     * 执行地区
     */
    private String zxdq;

    /**
     * 执行单位详称
     */
    private String zxdwxc;

    /**
     * 责令单位详称
     */
    private String zldwxc;

    /**
     * 感染传染疾病
     */
    private String grcrjb;

    /**
     * 强戒出所日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date qjcsrq;

    /**
     * 接受社区康复前所在的强制隔离场所
     */
    private String jssqkfqszdqzglcs;

    /**
     * 参加药物维持治疗门诊
     */
    private String cjywwczlmz;

    /**
     * 是否进入康复场所
     */
    private String sfjrkfcs;

    /**
     * 社区戒毒康复协议书
     */
    private String sqjdkfxys;

    /**
     * 社区戒毒康复责任书
     */
    private String sqjdkfzrs;

    /**
     * 月收入情况
     */
    private String ysrqk;

    /**
     * 身体状况
     */
    private String stzk;

    /**
     * 违法犯罪情况
     */
    private String wffzqk;

    /**
     * 当前状况
     */
    private String dqzk;

    /**
     * 驾驶证是否吊销
     */
    private String jszsfdx;

    /**
     * 交往吸毒人数
     */
    private Long jwxdrs;

    /**
     * 车辆信息
     */
    private String clxx;

    /**
     * 社会保障情况
     */
    private String shbzqk;

    public void setShbzqkList(List<String> lists) {
        this.shbzqk = StrUtil.join(",", lists);
    }

    /**
     * 就业帮助情况
     */
    private String jybzqk;

    public void setJybzqkList(List<String> lists) {
        this.jybzqk = StrUtil.join(",", lists);
    }

    /**
     * 家庭情况
     */
    private String jtqk;

    public void setJtqkList(List<String> lists) {
        this.jtqk = StrUtil.join(",", lists);
    }

    /**
     * 身体状况附件：（包含医院出具的诊断报告、检查报告、残疾证等）
     */
    private String stzkfj;

    /**
     * 初次吸毒时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date ccxdsj;

    /**
     * 初次吸毒被查获时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date ccxdbchsj;

    /**
     * 前科情况
     */
    private String qkqk;

    /**
     * 最后一次吸毒被拘留/戒毒开始时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date zhycxdbjljdkssj;

    /**
     * 最后一次吸毒被拘留/戒毒结束时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date zhycxdbjljdjssj;

    /**
     * 是否与他人在一起吸毒
     */
    private String sfytrzyqxd;

    /**
     * 累计戒毒次数
     */
    private Long ljjdcs;

    /**
     * 累计戒毒时间
     */
    private String ljjdsj;

    /**
     * 周均吸毒次数
     */
    private String zjxdcs;

    /**
     * 吸毒后的自我感觉（对自身）
     */
    private String xdhdzwgjdzs;

    /**
     * 吸毒后的自我感觉（对家庭）
     */
    private String xdhdzwgjdjt;

    /**
     * 吸毒后的自我感觉（对社会）
     */
    private String xdhdzwgjdsh;

    /**
     * 吸毒方式
     */
    private String xdfs;

    public void setXdfsList(List<String> lists) {
        this.xdfs = StrUtil.join(",", lists);
    }

    /**
     * 毒品来源
     */
    private String dply;

    public void setDplyList(List<String> lists) {
        this.dply = StrUtil.join(",", lists);
    }

    /**
     * 吸毒场所
     */
    private String xdcs;

    public void setXdcsList(List<String> lists) {
        this.xdcs = StrUtil.join(",", lists);
    }

    /**
     * 吸毒氛围
     */
    private String xdfw;

    public void setXdfwList(List<String> lists) {
        this.xdfw = StrUtil.join(",", lists);
    }

    /**
     * 初次吸毒原因
     */
    private String ccxdyy;

    public void setCcxdyyList(List<String> lists) {
        this.ccxdyy = StrUtil.join(",", lists);
    }

    /**
     * 吸毒资金来源
     */
    private String xdzjly;

    public void setXdzjlyList(List<String> lists) {
        this.xdzjly = StrUtil.join(",", lists);
    }

    /**
     * 戒毒后产生负面情绪原因
     */
    private String jdhcsfmqxyy;

    public void setJdhcsfmqxyyList(List<String> lists) {
        this.jdhcsfmqxyy = StrUtil.join(",", lists);
    }

    /**
     * 复吸毒品原因（心理因素）
     */
    private String fxdpyyxlys;

    public void setFxdpyyxlysList(List<String> lists) {
        this.fxdpyyxlys = StrUtil.join(",", lists);
    }

    /**
     * 复吸毒品原因（身体因素）
     */
    private String fxdpyystys;

    public void setFxdpyystysList(List<String> lists) {
        this.fxdpyystys = StrUtil.join(",", lists);
    }

    /**
     * 复吸毒品原因（社会环境因素）
     */
    private String fxdpyyshhjys;

    public void setFxdpyyshhjysList(List<String> lists) {
        this.fxdpyyshhjys = StrUtil.join(",", lists);
    }

    /**
     * 填表人
     */
    private String tbr;

    /**
     * 填表时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date tbsj;

    /**
     * 填表单位
     */
    private String tbdw;

    /**
     * 审核人
     */
    private String shenheren;

    /**
     * 审核时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date shsj;

    /**
     * 审核单位
     */
    private String shdw;

    /**
     * 联系电话
     */
    private String lxdh;

    /**
     * 社区戒毒社区康复人员签字时间（档案）
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date sqjdsqkfryqzsj;

    /**
     * 社区戒毒社区康复工作小组成员签字时间（档案）
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date sqjdsqkfgzxzcyqzsj;

    /**
     * 社区戒毒社区康复工作站负责人签字时间（档案）
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date sqjdsqkfgzzfzrqzsj;

    /**
     * 执行时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date zxsj;

    /**
     * 违法行为报告
     */
    private String wfxwbg;

    /**
     * 期满解除文书
     */
    private String qmjcws;

    /**
     * 是否脱失脱管
     */
    private String tstg;

    /**
     * 中止文书
     */
    private String zzws;

    /**
     * 终止原因
     */
    private String zzyy;

    /**
     * 终止日期
     */
    private Date zzrq;

    /**
     * 登记时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date djsj;

    /**
     * 是否渲染家访信息
     */
    private boolean renderJfrq;

    /**
     * 超期未报到 cqwbd、本期未尿检 bqwnj、外出人员 wcry、本月普通违反协议 ptwfxy
     */
    private String warningType;

}
